package com.example;

import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

/**
 * @author wuyinggang
 * @Description: todo
 * @date 2021/7/2015:56
 * 文件上传Service，返回文件名称
 */

public class FilesUploadService {

    //文件上传时间
    public static  String getUploadTime(){
        Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd");
        return simpleDateFormat.format(date);
    }

    //给原文件取新名字
    public static String getFileName(String fileOriginName){
        return UUID.randomUUID().toString().replace("-","")+fileOriginName.substring(fileOriginName.lastIndexOf("."));
    }


    /**
    　　* @param ${tags}
    　　* @return ${return_type}
    　　* @throws
    　　* @author wuyinggang 单文件上传MultipartFile file：文件,String path：临时目录
    　　* @date 2021/7/20 17:20
    　　*/
    public static String uploadOne(MultipartFile file,String path) throws IOException {
        String uploadTime = FilesUploadService.getUploadTime();
        //新的文件名为：临时存放路径+上传时间+新的文件名
        String newPath = path + uploadTime + "/" +FilesUploadService.getFileName(file.getOriginalFilename());
        File file1 = new File(newPath);
        //判断文件目录是否存在
        if(!file1.getParentFile().exists()){
            //创建文件存放目录
            //无论是几个/,都是创建一个文件夹
            ////mkdirs(): 创建多层目录，如：E:/upload/2019
            // mkdir(): 只创建一层目录，如：E:upload
            // 如果不加这一行不会创建新的文件夹，会报系统找不到路径
            file1.getParentFile().mkdirs();
        }

        //存储文件，把浏览器上传的文件复制到希望的位置
        file.transferTo(file1);
        //去掉目录名，保留文件总体路径，通过该路径访问图片
//        String filename = newPath.substring(newPath.lastIndexOf(path)).replace(path, "");

        //返回包含目录地址
        String filename = newPath;
        return filename;
    }

/**
　　* @param ${tags}
　　* @return ${return_type}
　　* @throws
　　* @author wuyinggang          多文件上传
　　* @date 2021/7/20 17:22
　　*/
    public static String uploadMoreFile(MultipartFile[] files, String path) throws IOException {
        //多文件文件名
        String uploadName = null;
        String uploudTime = FilesUploadService.getUploadTime();
        for (MultipartFile file : files) {
            if (file.isEmpty()){
                continue;
            }
            //新的文件存放路径加上新的文件名
            String newPath = path + uploudTime + "/" + FilesUploadService.getFileName(file.getOriginalFilename());
            File file1 = new File(newPath);
            //判断文件目录是否存在
            if (!file1.getParentFile().exists()) {
                //创建文件存放目录
                //无论是几个/，都是创建一个文件夹
                //mkdirs(): 创建多层目录，如：E:/upload/2019
                //mkdir(): 只创建一层目录，如：E:upload
                //如果不加这一行不会创建新的文件夹，会报系统找不到路径
                file1.getParentFile().mkdirs();
                }
            //存储文件
            file.transferTo(file1);
            if (uploadName == null) {
//                uploadName = newPath.substring(newPath.lastIndexOf(path)).replace(path, "");
                uploadName = newPath;
                } else {
//                uploadName = uploadName + "," + newPath.substring(newPath.lastIndexOf(path)).replace(path, "");
                uploadName = uploadName+","+newPath;
                }
            }
        //F:/es/upload/temporary/2021/07/21/e9a6fc9dfcb844c6a643bb8d947ab856.sql
        return uploadName;
    }
}
